package com.tencent.qf.user.service;


import com.tencent.qf.common.pojo.HttpResult;
import com.tencent.qf.user.dal.UserDO;
import com.tencent.qf.user.dal.UserRelationRecord;
import com.tencent.qf.user.dal.UserTutorRelation;
import com.tencent.qf.user.dal.entity.DwmUserModelInfoRt;
import com.tencent.qf.user.dto.UserBasicInfo;
import com.tencent.qf.user.dto.request.*;
import com.tencent.qf.user.dto.UserInfoDetail;
import com.tencent.qf.user.dto.response.*;
import com.tencent.qf.user.dto.request.TeamUserInfoRequest;
import com.tencent.qf.user.dto.request.UserInfoDTO;

import java.util.List;
import java.util.concurrent.CompletableFuture;

/**
 * Copyright (C) 2022 Limited, a Tencent company. All rights reserved.
 *
 * @author p_htaozhou@tencent.com
 * @create: 2022/9/7 16:07
 */
public interface UserService {
    List<UserDO> queryAllUser();

    /**
     * 用户分层-用户下单情况
     *
     * @param userInfoDTO
     * @return
     */
    HttpResult<UserPaymentCountDTO> userPaymentInfo(UserInfoDTO userInfoDTO);

    UserPaymentCountDTO userPaymentInfoV2(UserInfoDTO userInfoDTO);

    UserPaymentCountDTO userPaymentInfoIncludeJdGiftCoupon(UserPaymentInfoIncludeJdGiftCouponReq request);

    /**
     * 批量用户分层-用户下单情况
     *
     * @param userInfoDTOs
     * @return
     */
    HttpResult<List<UserPaymentCountDTO>> batchUserPaymentInfo(List<UserInfoDTO> userInfoDTOs);

    HttpResult<List<UserPaymentCountDTO>> batchUserPaymentInfoV2(List<UserInfoDTO> userInfoDTOs);

    HttpResult<AOrderNumInfo> queryAOrderNumBySkuId(QueryAOrderNumBySkuIdRequest request);

    HttpResult<AOrderNumInfo> queryAOrderNumAll(QueryAOrderNumAllRequest request);

    /**
     * 批量查询用户绑定关系
     *
     * @param request
     * @return
     */
    HttpResult<List<UserRelationRecord>> userRelationRecordBatch(UserRelationRecordBatchRequest request);

    /**
     * 通过uid、unionId查询用户信息
     *
     * @param request
     * @return
     */
    HttpResult<UserInfoDetail> userInfoByUidUnionId(UserInfoByUidUnionIdRequest request);


    /**
     * 用户标签查询
     * @param uid
     * @param saasId
     * @return
     */
    List<UserTagInfo> userTags(String uid,String saasId);

    /**
     * 批量获取用户基础信息
     */
    HttpResult<List<UserBasicInfo>> getUserBasicInfos(UserBasicInfoBatchRequest request);

    HttpResult<IsEditNickNameOrHeadUrlResponse> isEditNickNameOrHeadUrl(String irisUid);

    /**
     * 团长uid查询接口
     */
    HttpResult<List<IrisUserInfoDTO>> teamUserInfo(TeamUserInfoRequest request);

    HttpResult<LotteryAwardInfo> getAwardPoolInfo(QueryLotteryAwardInfoRequest request);


    HttpResult<List<String>> compareUserPaymentInfo(Integer minPage, Integer maxPage, Integer size);

    CompletableFuture<Boolean> compare(DwmUserModelInfoRt dwmUserModelInfoRt);

    HttpResult<List<OrderInfo>> getOrderInfos(BatchOrderInfoRequest request);

    /**
     * 批量查询用户绑定导师关系
     * @param request
     * @return
     */
    HttpResult<List<UserTutorRelation>> userRelationTutorBatch(UserRelationTutorBatchRequest request);

    HttpResult<UserInfoForGoldDetail> userInfoForGoldDetail(UserInfoForGoldDetailRequest request);

    HttpResult<List<OrderInfoByUid>> getOrderInfosByUid(OrderInfoByUidRequest request);

    HttpResult<List<ParentInfo>> userParentInfoBatch(ParentInfoBatchRequest request);

    HttpResult<List<EfficientOrderNumInfo>> queryEfficientOrderNum(EfficientOrderNumRequest request);

    /**
     * 查询用户有效分销单数
     * @param request
     * @return
     */
    HttpResult<List<EfficientOrderNumInfo>> queryEfficientSplitOrder(EfficientOrderNumRequest request);

    HttpResult<UpgradeTimeInfo> upgradeTime(UpgradeTimeRequest request);

    /**
     * 查询全场A单数量批量接口
     * @param request
     * @return
     */
    HttpResult<List<AOrderNumInfo>> queryAOrderNumAllBatch(QueryAOrderNumAllRequest request);

    /**
     * 根据分销单号批量获取订单
     * @param request
     * @return
     */
    HttpResult<List<OrderInfo>> orderInfosByPlainOrderId(OrderInfoByPlainOrderIdRequest request);

}
